package com.os.service;

import com.os.pojo.virtualmemory.Segment;
import com.os.pojo.vo.*;

import java.util.List;

/**
 * 操作系统服务接口
 */
public interface OsService {


    /**
     * 打开文件，载入页表
     */
    void open(String path);

    /**
     * 切换置换算法
     */
    void changeSwapAlgorithm(String swap);

    /**
     * 获取置换算法名字
     */
    String getSwapAlgorithm();

    /**
     * 修改内存信息
     */
    void changeMemoryInfo(int physicalMemorySize, int frameSize);

    /**
     * 获取内存信息
     */
    MemoryInfoVo getMemoryInfo();

    /**
     * 获取进程信息列表
     */
    List<PcbInfoVo> getPcbInfoList();

    /**
     * 获取某进程的段信息数组
     */
    List<SegmentVo> getSegmentInfoByPcbId(int pcbId);

    /**
     * 获取物理内存中内存块列表
     */
    List<FrameVo> getMemoryFrameList();

    /**
     * 通过段号页号，偏移量，生成对应逻辑地址
     */
    List<Integer> getLogicAddress(int pcbId, Integer segmentId, Integer pageId, Integer offset);


//    /**
//     * 输出逻辑地址对应的字符，并合成字符串
//     */
//    String getValueByAddress(int pcbId, int address) throws Exception;

    /**
     * 输出逻辑地址列表对应的字符，并合成字符串
     */
    String getValueByAddressList(int pcbId, List<Integer> addressList);

    /**
     * 使用四种算法读取，并计算命中率缺页率
     */
    String countAlgorithm(int pcbId, List<Integer> addressList);

    /**
     * 将addressList打乱顺序
     */
    void shuttleList(List<Integer> addressList);

    /**
     * 重置内存
     */
    void initMemory();

    /**
     * 获取每次请求访问的信息
     */
    List<ActionVo> getActionList();
}
